import BaseModel from './BaseModel'
import { get, post } from '../api/ajax'
import API from '@/api/apis'
import { DateFormat } from 'yb-tool'
import { ImageFill, PixelUnitType } from '../utils/filters'

// 作品模型
class ProductModel extends BaseModel {

  // 产品名称 String
  public name = ''
  // 产品图片 String
  public cover = ''
  // 产品版本 String
  public version = ''
  // 产品类型 String
  public type = ''
  // 产品内容 String
  public content = ''
  // 产品描述 String
  public describe = ''
  // 产品链接 String
  public url = ''
  // 产品开始时间 Date
  public startDate = ''
  public startDateStr = ''
  // 产品结束时间 Date
  public endDate = ''
  public endDateStr = ''
  // 是否显示在我的里面 Boolean
  public isShow = false
  // 开始结束时间字符串
  public strtAndEndTime = ''

  // 构造方法
  constructor() {
    super()
  }

  // 获取ME里面的数据
  public static getMeProductData() {
    return new Promise((resolve, reject) => {
      get(API.production.meData).then((dataArr: any) => {
        resolve(this.getModelsWithArr(dataArr))
      }).catch((err) => {
        reject(err)
      })
    })
  }

  // 获取所有不同类型数组
  public static typeDistinct() {
    return get(API.production.typeDistinct)
  }

  /* ----- 获取指定图片大小 -------*/
  // 手机端我的界面图片
  get mMeCover() {
    return ImageFill(this.cover, 3.2, 3.2, PixelUnitType.rem)
  }

  // 手机端作品列表
  get mMeListCover() {
    return ImageFill(this.cover, 1.6, 1.6, PixelUnitType.rem)
  }

  // PC端我的界面图片
  get pcMeCover() {
    return ImageFill(this.cover, 130, 130)
  }

  // PC端作品列表
  get pcMeListCover() {
    return ImageFill(this.cover, 100, 100)
  }

  public setDataWithJson(json: object) {
    super.setDataWithJson(json)
    const startTimeStr = DateFormat(new Date(this.startDate), 'YYYY/MM/DD')
    this.startDateStr = startTimeStr
    const endTimeStr = DateFormat(new Date(this.endDate), 'YYYY/MM/DD')
    this.endDateStr = endTimeStr
    this.strtAndEndTime = `${startTimeStr} - ${endTimeStr}`
  }



  // 获取单个学习数据
  public getModel() {
    return new Promise((resolve, reject) => {
      get(API.production.detail, {
        id: this._id,
      }).then((data) => {
        this.setDataWithJson(data)
        resolve(this)
      }).catch((err) => {
        reject(err)
      })
    })
  }

  // 添加或者修改数据
  public addOrModifyData() {
    const api = this._id ? API.production.update : API.production.add
    return new Promise((resolve, reject) => {
      post(api, this.getJson([
        'name', 'cover', 'version', 'type',
        'content', 'describe', 'url', 'startDate',
        'endDate', 'isShow', '_id'])).then((data) => {
        this.setDataWithJson(data)
        resolve(this)
      }).catch((e) => {
        reject(e)
      })
    })
  }

  // 删除单个数据
  public removeData() {
    return get(API.production.dustbinPush, {
      id: this._id,
    })
  }
}

export default ProductModel
